package com.example.spring.service;

import com.example.spring.Util.DBUtil;
import com.example.spring.entity.Msg;
import com.example.spring.entity.UserBean;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;

@Component
public class UserService {
    @Resource
    DBUtil dbUtil;

    // 私有化构造方法，防止外部创建对象
    private UserService() {
    }

    public Msg<UserBean> signup(UserBean user) {
        Msg<UserBean> userMsg = new Msg<>(validate(user));
        // 如果验证通过，数据格式无误，则将用户信息插入数据库
        if (userMsg.getErrMsg() == null) {
            // 如果插入失败，说明用户已存在
            if (!dbUtil.insertUser(user)) {
                userMsg.setErrMsg("用户已存在");
            } else {
                userMsg.setData(user);
            }
        }
        return userMsg;
    }

    public Msg<UserBean> login(UserBean user) {
        // 登录时允许邮箱为空
        if (user.getEmail() == null || "".equals(user.getEmail().trim())) {
            user.setEmail("Null@Null.null");
        }
        Msg<UserBean> userMsg = new Msg<>(validate(user));
        // 如果验证通过，数据格式无误，则进行登录验证
        if (userMsg.getErrMsg() == null) {
            UserBean dbUser = dbUtil.getUserByName(user.getName());
            // 如果密码不匹配，说明用户名或密码错误
            if (dbUser == null || !user.getPassword().equals(dbUser.getPassword())) {
                userMsg.setErrMsg("用户名或密码错误");
            } else {
                userMsg.setData(dbUser);
            }
        }
        return userMsg;
    }

    // 验证数据格式是否正确
    String validate(UserBean user) {
        if (user == null) {
            return "用户信息未传递到服务器";
        }
        if (user.getName() == null || "".equals(user.getName().trim())) {
            return "请输入用户名";
        }
        if (user.getPassword() == null || "".equals(user.getPassword().trim())) {
            return "请输入密码";
        } else if (user.getPassword().length() < 6 || user.getPassword().length() > 12) {
            return "密码长度应为6~12";
        }
        if (user.getEmail() == null || "".equals(user.getEmail().trim())) {
            return "请输入邮箱";
        }
        // 正则表达式验证邮箱格式
        else if (!user.getEmail().matches("^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+$")) {
            return "邮箱格式错误";
        }
        return null;
    }
}
